package com.wangyk.pay.util;

import java.security.MessageDigest;
import java.util.Iterator;
import java.util.Map;
import java.util.Map.Entry;

public class MD5Util
{
    private static String byteArrayToHexString(byte b[])
    {
        StringBuffer resultSb = new StringBuffer();
        for (int i = 0; i < b.length; i++)
            resultSb.append(byteToHexString(b[i]));
        
        return resultSb.toString();
    }
    
    private static String byteToHexString(byte b)
    {
        int n = b;
        if (n < 0)
            n += 256;
        int d1 = n / 16;
        int d2 = n % 16;
        return hexDigits[d1] + hexDigits[d2];
    }
    
    public static String MD5Encode(String origin, String charsetname)
    {
        String resultString = null;
        try
        {
            resultString = new String(origin);
            MessageDigest md = MessageDigest.getInstance("MD5");
            if (charsetname == null || "".equals(charsetname))
                resultString = byteArrayToHexString(md.digest(resultString.getBytes()));
            else
                resultString = byteArrayToHexString(md.digest(resultString.getBytes(charsetname)));
        }
        catch (Exception exception)
        {
        }
        return resultString;
    }
    
    private static final String hexDigits[] =
        {"0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "a", "b", "c", "d", "e", "f"};
    
    // 生成xml
    public static String ArrayToXml(Map<String, String> arr)
    {
        String xml = "<xml>";
        Iterator<Entry<String, String>> iter = arr.entrySet().iterator();
        while (iter.hasNext())
        {
            Entry<String, String> entry = iter.next();
            String key = entry.getKey();
            String val = entry.getValue();
            if (IsNumeric(val))
            {
                xml += "<" + key + ">" + val + "</" + key + ">";
            }
            else
                xml += "<" + key + "><![CDATA[" + val + "]]></" + key + ">";
        }
        xml += "</xml>";
        return xml;
    }
    
    public static boolean IsNumeric(String str)
    {
        if (str.matches("\\d *"))
        {
            return true;
        }
        else
        {
            return false;
        }
    }
    
    // // 解析XML
    // private Map<String, String> doXMLParse(String xml)
    // throws XmlPullParserException, IOException
    // {
    // InputStream inputStream = new ByteArrayInputStream(xml.getBytes());
    // Map<String, String> map = null;
    // XmlPullParser pullParser = XmlPullParserFactory.newInstance().newPullParser();
    // pullParser.setInput(inputStream, "UTF-8");// 为xml设置要解析的xml数据
    // int eventType = pullParser.getEventType();
    // while (eventType != XmlPullParser.END_DOCUMENT)
    // {
    // switch (eventType)
    // {
    // case XmlPullParser.START_DOCUMENT:
    // map = new HashMap<String, String>();
    // break;
    // case XmlPullParser.START_TAG:
    // String key = pullParser.getName();
    // if (key.equals("xml"))
    // break;
    // String value = pullParser.nextText();
    // map.put(key, value);
    // break;
    // case XmlPullParser.END_TAG:
    // break;
    // }
    // eventType = pullParser.next();
    // }
    // return map;
    // }
}
